#include "threadPool.h"
#include "worker.h"
#include "taskQueue.h"



int main(int argc,char *argv[])
{
    // ./server 192.168.187.128 1234 4
    ARGS_CHECK(argc,4);
    
    threadPool_t threadPool;
    int workerNum = atoi(argv[3]);
    threadPoolInit(&threadPool,workerNum);// 线程池初始化

    // 创建套接字 socket
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    // 初始化
    tcpInit(argv[1],argv[2],&sockfd);

    // 创建子线程，子线程与主线程共享同一个sockfd
    makeWorker(&threadPool);
    
    // 主线程与子线程之间进行多路IO服复用连接
    int epfd = epoll_create(1);
    epollAdd(epfd,sockfd); // 将sockfd加入监听集合

    while(1)
    {
        struct epoll_event readySet[1024];
        int readyNum = epoll_wait(epfd,readySet,1024,-1);//-1->表示无限等待
        // 遍历就绪集合
        for(int i=0;i<readyNum;i++)
        {
            if(readySet[i].data.fd == sockfd) // 表示有新连接接入
            {
                int netfd = accept(sockfd,NULL,NULL);
                printf("1 client  connect!\n");
                pthread_mutex_lock(&threadPool.mutex);
                enQueue(&threadPool.taskQueue,netfd);
                printf("1 netfd enqueue!\n");
                pthread_cond_signal(&threadPool.cond);
                pthread_mutex_unlock(&threadPool.mutex);
            }

        }
    }



    return 0;
}
